Skip to content

Conversation

@hiddewie
Copy link
Contributor

@hiddewie hiddewie commented Jun 7, 2025

Hi!

Over the past years I have been working on a fork of the OpenRailwayMap.

The announcement can be found on the OpenRailwayMap mailing list and on the OpenStreetMap community forum.

The fork has several features, and is actively being developed by me and several more contributors:

  • Vector-based data: the map is interactive with e.g. hover and popup showing data details.
  • Map style improvements: station size, state of lines and statons, signal support for many new countries.
  • Visual UI improvements like: configurable background map, map settings and dark mode.
  • Additional layers: loading gauge and track class.
  • Daily data updates for the entire planet.
  • OpenHistoricalMap integration for historical railway infrastructure.

At the moment the fork is hosted on https://openrailwaymap.app using Fly.io. This is purely practical, it could be hosted anywhere else.

This pull request is a starter to discuss:

  • Can we integrate the fork into the Github OpenRailwayMap organization
  • Can we publish the fork on the domain openrailwaymap.org?

These are open questions, any response is appreciated!

hiddewie and others added 30 commits May 1, 2025 09:06
See discussion in
#278 (reply in thread)
about Münster (https://www.openstreetmap.org/node/3374898279) not being
qualified as a large station.

One of the problems is that `public_transport=platform` are only
imported if they are tagged as nodes or ways, not if they are relations.
From discussion in
#278 (reply in thread)

The `public_transport=stop_area` relations are not handled at the moment
to find routes that belong to a station.

By importing these relations, and joining the platforms, stop positions
and stations together, more routes can be found where the spatial join
does not work.
Part of #269

Order the signal features by their order in the definition YAML. 

This will allow reordering signals such that they match real life order
on a signal post.

Followup PRs:
- order all signals based on their old ordering to keep the current
ordering (based on signal type)
- reorder german signals to solve #269
- Output variable values into tiles to split the features and their
variables


![image](https://github.com/user-attachments/assets/78477ab9-ba8d-4421-be34-a45d805915f9)
Followup on #369.

Order all the signals based on their type, such that the order on the
map does not change.

No functional changes.
Part of #269

Signals on mast from bottom to top:
- W1 
- W18
- W22
- W18
- W2/W26a/W26b
- W20/W19
- W24 
- W21
- Main / combined signals

### Testing

W1 and route indicator below main signal
W18 below the main signal
http://localhost:8000/#view=16.62/52.213161/20.939129&style=signals

![image](https://github.com/user-attachments/assets/5867ef33-dfb3-4708-b672-606d0796c5b7)

http://localhost:8000/#view=18.89/52.2090341/20.9242024&style=signals

![image](https://github.com/user-attachments/assets/d14ba092-a54f-493d-9f6d-c2c8bbc00cbb)
Fixes #269

On signal mast, from bottom to top:
- Shunting / minor signals
- Wrong road Zs 6
- Dead end Zs 13
- Distant Route direction Zs 2v
- Distant speed signals Zs 3v
- Distant signal Vr, Hl, Ks
- Main / combined signal
- Speed signal Zs 3
- Route direction Zs 2

The conditional placement of Zs 2 below the main/combined signal in case
Zs 3 is present, is not implemented.

### Testing

Distant signals are below main signals
http://localhost:8000/#view=17.15/51.939655/7.633332&style=signals

![image](https://github.com/user-attachments/assets/aa02f9f3-7814-4328-8023-fa35d2bdb9f0)

Route signal on top, shunting on the bottom
http://localhost:8000/#view=18.79/51.9434865/7.6322188&style=signals

![image](https://github.com/user-attachments/assets/2043ea9b-d51e-4838-9fcb-d3bf4f47fd6f)

Wrong road, distant route and combined Ks signal
http://localhost:8000/#view=18.71/50.9496012/6.9523263&style=signals

![image](https://github.com/user-attachments/assets/cc4c40f1-4b69-4b88-9b0e-d48e1c5964fa)

Departure, distant, main and route signals
http://localhost:8000/#view=18.93/50.944902/6.9568253&style=signals

![image](https://github.com/user-attachments/assets/26bf45ad-6273-46ca-bb52-1bc9a3bfc103)
Problem: signals with two types (e.g. main and departure) are matched 2
times during import. This causes the same feature to be output twice for
the same signal.

See e.g.
https://openrailwaymap.fly.dev/#view=19.43/47.2588149/11.4025907&style=signals

![image](https://github.com/user-attachments/assets/808ae5dc-c477-4697-9c55-1c024d7d46db)

After:

![image](https://github.com/user-attachments/assets/1e8c52a2-76a1-4d7b-ba2f-26532e8d7076)
Currently the news hash changes too often, also on redeployment when the
content of the news does not change.

Solution: calculate the news hash on startup using a SHA1, and expose a
custom header `x-content-hash`.

First reload:

![image](https://github.com/user-attachments/assets/d61c4237-6bd1-4864-b3dd-a783e352c6d7)

Reload, hash `68fe36f654263e549302c3317aaab0ad32c5ebc3` is picked up: 

![image](https://github.com/user-attachments/assets/81282321-21af-414f-8c27-dae2e9312eb1)
For #313 

Goal: ensure that both AMD64 and ARM64 images build and run correctly.

See workflow run
https://github.com/hiddewie/OpenRailwayMap-vector/actions/runs/14814434607
which runs successfully, including the screenshots.
Changes:
- main repeated below main signals
- speed limits above main signals
- distant below main signals
- do not duplicate icons for repeated main signal on shutzsignal
- showplow signals
- combined main and verschubsignal
- resetting switch signal
- EK 60 poor sight
- rautentafel
-  Weichenüberwachungssignal
- Zuglaufmeldestelle
- Wartesignal light


![image](https://github.com/user-attachments/assets/9a4751f8-cf8f-4213-b53c-9faf67c1c8bd)
As the title says, I made an adjustment, so that We1 (We1a, We1b and
We1c) signs are rendered, similarly to others We (PL) signs

Co-authored-by: Hidde Wieringa <[email protected]>
- AT abdruck
- AT signalnachahmer mit magnet
- line legend with train protection construction rank
- GB unknown route (threatre)
### Documentation and examples

See https://provoz.spravazeleznic.cz/portal/ViewArticle.aspx?oid=1946317
See
https://www.masinky.info/wp-content/uploads/2016/08/SZDC%20D1%20se%20zmenou%20c_1-3%20a%20Vynos%20c_3.pdf
See
https://web.archive.org/web/20090604163859/http://www.volweb.cz/asokol/cd/predpisy/navcd.htm
See https://1-2-8.net/mwva/mikulda/d1/htm/druha2.htm
See
https://www.flickr.com/photos/mark_vogel/4593161052/in/album-72157623901945369
See
https://www.lighting-gallery.net/gallery/displayimage.php?album=4715&pos=6&pid=223341
See https://www.atecheb.cz/produkty/znacky-upozornovadla
See https://www.masinky.info/wp-content/uploads/2013/12/TNZ_34_2605.pdf
See Cabride / Cabview videos "Pohled na trať" on Youtube

### Implemented

- Main signals
- Shunting signals
- Combined signals
- Distant signals
- Speed limit (sign / light)
- Distant speed limit (sign / light)

There are currently two forms of tagging in use, both undocumented. For
example `railway:signal:main=CZ` and
`railway:signal:main=CZ-D1:hlavni_navestidlo`.

### Next

- distinguishing different forms of main/combined signals

### Testing

http://localhost:8000/#view=15.55/49.739468/13.593939&style=signals

![image](https://github.com/user-attachments/assets/5011b09b-4f86-4311-a06f-89d499d28756)

http://localhost:8000/#view=17.51/49.772657/13.697165&style=signals

![image](https://github.com/user-attachments/assets/a06911d7-a3c2-4356-86c0-506595c24996)

http://localhost:8000/#view=16.06/49.720665/13.347677&style=signals

![image](https://github.com/user-attachments/assets/fe1c25db-ca3d-4da3-b343-63c34ed74a87)
Fixes #397

Changes:
- Split vacancy detection features into two features
- DE Sv signals: add default
- Add missing icons for traverser and turntable
Fixes #401 

The railway crossings, phones, subway entrances, buffer stops, derailer
and retarders were not output in tiles.

The tiles are generated up to and including zoom level 14. Higher zoom
levels are not output.

The standard POIs are now all output from zoom 14 and up. The map style
is conditioned on zoom levels, showing just the features that need to be
shown according to their minimum allowed zoom level.

Additionally, crossings are moved to zoom 15 instead of zoom 16.
Fixes #402

Vacancy detection already has a `railway` tag value, so does not need
`railway=signal`.


![image](https://github.com/user-attachments/assets/e07eda56-1a09-446e-a5f7-d8e04b7f53da)
Part of #321

For Berlin, the tiles of the signals layer change from 1.7MB to 2.1MB.

TODO:
- [x] implement for speed
- [x] implement for electricity
- [x] reuse tag info (use generated SQL?, modify view to function?)
- [x] Implement a nice tag description for every tag as feature property
title
- [x] Docs about how matching works
- [x] verify for EU import if any features changed

Changes in EU signals:
- DE zp10 is now detected correctly if it exists on the signal (e.g.
https://www.openstreetmap.org/node/110088505)
- DE HHA h1 is the default instead of h0, no difference for signals that
tag their states
- NL speed signals (277, 276, 279) favor H/L/G aspects over speed values
if the speed signal can show both (e.g.
https://www.openstreetmap.org/node/6013691025)
- PL sp, os, ms have different defaults if no states are tagged (e.g.
https://www.openstreetmap.org/node/3046407095)

http://localhost:8000/#view=13.53/47.35671/0.67842&style=signals

![image](https://github.com/user-attachments/assets/b613d2d0-af93-4ff5-936f-8dcdc21d8eca)

### Import comparison between master and this branch (Europe)

#### Master

```
2025-05-18 13:37:42  Reading input files done in 74s (1m 14s).
2025-05-18 13:37:42    Processed 21188740 nodes in 31s - 684k/s
2025-05-18 13:37:42    Processed 2229021 ways in 40s - 56k/s
2025-05-18 13:37:42    Processed 340088 relations in 3s - 113k/s

...
CREATE VIEW
Time: 54.704 ms
SELECT 384855
Time: 21623.621 ms (00:21.624)
CREATE INDEX
Time: 543.683 ms
CLUSTER
Time: 1185.724 ms (00:01.186)
Timing is on.
CREATE VIEW
Time: 2.917 ms
CREATE VIEW
Time: 1.791 ms
CREATE VIEW
Time: 3.016 ms
CREATE VIEW
Time: 1.750 ms
CREATE VIEW
Time: 2.224 ms
CREATE VIEW
Time: 2.335 ms
SELECT 102219
Time: 5919.989 ms (00:05.920)
CREATE INDEX
Time: 375.798 ms
SELECT 123412
Time: 4931.113 ms (00:04.931)
CREATE INDEX
Time: 28.485 ms
SELECT 102219
Time: 3070.182 ms (00:03.070)
CREATE INDEX
...

                         name                         |  size
------------------------------------------------------+---------
 railway_line (r)                                     | 654 MB
 platforms (r)                                        | 203 MB
 grouped_stations_with_route_count (m)                | 101 MB
 signal_features (m)                                  | 95 MB
 platforms_way_idx (i)                                | 86 MB
 signals (r)                                          | 80 MB
 stop_positions (r)                                   | 76 MB
 railway_line_way_idx (i)                             | 74 MB
 stations_clustered (m)                               | 73 MB
 pois (r)                                             | 70 MB
 stop_positions_way_idx (i)                           | 34 MB
 pois_way_idx (i)                                     | 24 MB
 stations (r)                                         | 23 MB
 signals_way_idx (i)                                  | 21 MB
 railway_positions (r)                                | 21 MB
 railway_switches (r)                                 | 16 MB
 signal_features_way_index (i)                        | 15 MB
 railway_positions_way_idx (i)                        | 8848 kB
 stop_areas (r)                                       | 7720 kB
 stop_areas_node_ref_ids_idx (i)                      | 7200 kB
 railway_switches_way_idx (i)                         | 7040 kB
 spatial_ref_sys (r)                                  | 6936 kB
 routes_stop_ref_ids_idx (i)                          | 6936 kB
 stations_clustered_station_ids (i)                   | 6760 kB
 stations_with_route_count (m)                        | 5640 kB
 stop_areas_stop_ref_ids_idx (i)                      | 5104 kB
 stations_way_idx (i)                                 | 5072 kB
 routes (r)                                           | 4648 kB
 routes_platform_ref_ids_idx (i)                      | 4176 kB
 grouped_stations_with_route_count_center_index (i)   | 4168 kB
 grouped_stations_with_route_count_buffered_index (i) | 4160 kB
 stations_with_route_count_idx (i)                    | 2736 kB
 stations_id_idx (i)                                  | 2736 kB
 boxes (r)                                            | 2000 kB
 subway_entrances (r)                                 | 1640 kB
 stop_areas_platform_ref_ids_idx (i)                  | 1216 kB
 turntables (r)                                       | 1112 kB
 subway_entrances_way_idx (i)                         | 632 kB
 boxes_way_idx (i)                                    | 336 kB
 spatial_ref_sys_pkey (i)                             | 208 kB
 turntables_way_idx (i)                               | 104 kB
 sql_features (r)                                     | 104 kB
 sql_implementation_info (r)                          | 48 kB
 sql_sizing (r)                                       | 48 kB
 sql_parts (r)                                        | 48 kB
 osm2pgsql_properties (r)                             | 16 kB
 osm2pgsql_properties_pkey (i)                        | 16 kB
(47 rows)

Time: 7.339 ms
Timing is on.
  size
---------
 1762 MB

```

#### This branch

```
2025-05-18 13:12:50  Reading input files done in 81s (1m 21s).
2025-05-18 13:12:50    Processed 21188740 nodes in 38s - 558k/s
2025-05-18 13:12:50    Processed 2229021 ways in 40s - 56k/s
2025-05-18 13:12:50    Processed 340088 relations in 3s - 113k/s

...
CREATE VIEW
Time: 70.365 ms
SELECT 384815
Time: 54559.599 ms (00:54.560)
CREATE INDEX
Time: 534.438 ms
CLUSTER
Time: 1675.338 ms (00:01.675)
CREATE FUNCTION
Time: 8.002 ms
DO
Time: 11.928 ms
CREATE FUNCTION
Time: 14.257 ms
DO
Time: 12.453 ms
CREATE FUNCTION
Time: 11.350 ms
DO
Time: 12.310 ms
Timing is on.
CREATE VIEW
Time: 12.079 ms
CREATE VIEW
Time: 12.335 ms
CREATE VIEW
Time: 14.242 ms
CREATE VIEW
Time: 13.268 ms
CREATE VIEW
Time: 12.490 ms
CREATE VIEW
Time: 12.486 ms
SELECT 102219
Time: 3678.441 ms (00:03.678)
CREATE INDEX
Time: 1559.621 ms (00:01.560)
SELECT 123412
Time: 4719.376 ms (00:04.719)
CREATE INDEX
Time: 36.647 ms
SELECT 102219
Time: 3117.260 ms (00:03.117)
CREATE INDEX
...
                         name                         |  size
------------------------------------------------------+---------
 railway_line (r)                                     | 612 MB
 platforms (r)                                        | 203 MB
 signal_features (m)                                  | 108 MB
 grouped_stations_with_route_count (m)                | 101 MB
 signals (r)                                          | 93 MB
 platforms_way_idx (i)                                | 86 MB
 stop_positions (r)                                   | 76 MB
 railway_line_way_idx (i)                             | 74 MB
 stations_clustered (m)                               | 73 MB
 pois (r)                                             | 70 MB
 stop_positions_way_idx (i)                           | 34 MB
 pois_way_idx (i)                                     | 24 MB
 stations (r)                                         | 23 MB
 signals_way_idx (i)                                  | 21 MB
 railway_positions (r)                                | 21 MB
 railway_switches (r)                                 | 16 MB
 signal_features_way_index (i)                        | 15 MB
 railway_positions_way_idx (i)                        | 8848 kB
 stop_areas (r)                                       | 7720 kB
 stop_areas_node_ref_ids_idx (i)                      | 7200 kB
 railway_switches_way_idx (i)                         | 7040 kB
 routes_stop_ref_ids_idx (i)                          | 6936 kB
 spatial_ref_sys (r)                                  | 6936 kB
 stations_clustered_station_ids (i)                   | 6760 kB
 stations_with_route_count (m)                        | 5640 kB
 stop_areas_stop_ref_ids_idx (i)                      | 5104 kB
 stations_way_idx (i)                                 | 5072 kB
 routes (r)                                           | 4648 kB
 routes_platform_ref_ids_idx (i)                      | 4176 kB
 grouped_stations_with_route_count_center_index (i)   | 4168 kB
 grouped_stations_with_route_count_buffered_index (i) | 4160 kB
 stations_with_route_count_idx (i)                    | 2736 kB
 stations_id_idx (i)                                  | 2736 kB
 boxes (r)                                            | 2000 kB
 subway_entrances (r)                                 | 1640 kB
 stop_areas_platform_ref_ids_idx (i)                  | 1216 kB
 turntables (r)                                       | 1112 kB
 subway_entrances_way_idx (i)                         | 632 kB
 boxes_way_idx (i)                                    | 336 kB
 spatial_ref_sys_pkey (i)                             | 208 kB
 sql_features (r)                                     | 104 kB
 turntables_way_idx (i)                               | 104 kB
 sql_implementation_info (r)                          | 48 kB
 sql_parts (r)                                        | 48 kB
 sql_sizing (r)                                       | 48 kB
 osm2pgsql_properties (r)                             | 16 kB
 osm2pgsql_properties_pkey (i)                        | 16 kB
(47 rows)

Time: 10.132 ms
Timing is on.
  size
---------
 1745 MB
```
Hi, recently the instruction for signalling in PL was updated (20th may)
and it implemented half speeds for certain speed signals (speeds up to
100 km/h, every 5 km/h from 10 km/h). Since it's quite new, I haven't
spotted any of those on railway network yet. However, for future edits,
I've allowed for half speeds to be rendered with W8, W9 and W27a signals

source:
https://www.plk-sa.pl/files/public/user_upload/pdf/Akty_prawne_i_przepisy/Instrukcje/Wydruk/Ie/05_Instrukcja_Ie-1-od_2025-05-20_WCAG.pdf

---------

Co-authored-by: Hidde Wieringa <[email protected]>
This PR properly imports the feature (`railway` tag) and state of a
station.

For example a `disused:railway=yard` will be imported as `feature=yard`
and `state=disused`.

The UI can show the state, and render the station feature with a
different (gray?, brown?) color.

Razed station features will no longer be imported.
Part of #302 

See
https://wiki.openstreetmap.org/wiki/OpenRailwayMap/Tagging#Catenary_mast

http://localhost:8000/#view=14/52.27324/4.66677&style=electrification

![image](https://github.com/user-attachments/assets/162f1334-d8bc-4a88-a7e0-6b0aafe37b06)

http://localhost:8000/#view=15/52.27324/4.66677&style=electrification

![image](https://github.com/user-attachments/assets/1d88c79a-1e2e-483c-9127-cda0221e0767)


http://localhost:8000/#view=17.4/52.162278/4.559897&style=electrification

![image](https://github.com/user-attachments/assets/e838c7d8-92b0-4349-812d-c926e8e0f908)

http://localhost:8000/#view=14/52.37844/4.9105&style=electrification

![image](https://github.com/user-attachments/assets/90f39563-0735-4778-b6f5-97cef19c08ca)

http://localhost:8000/#view=15/52.37805/4.91108&style=electrification

![image](https://github.com/user-attachments/assets/79d2cd59-c8ff-4c1a-922a-817d245774ae)

http://localhost:8000/#view=16/52.377434/4.909438&style=electrification

![image](https://github.com/user-attachments/assets/18030a8f-c034-434d-9a08-38e4ebf64a91)
Followup on #412

Some small details were missing: tile generation, refs and taginfo.
Hi there, to better differentiate between D0 and mechanical distant
signals, I've added W1 sign to those icons (similarly to german
mechanical Vr signals)
Fixes #408

Stations still work fine:
http://localhost:8000/#view=14.01/51.38781/-0.06701&date=1969

![image](https://github.com/user-attachments/assets/1ec73dd0-32d5-4c64-b937-25dfa69f77bb)
Fixes #414

Opening the map in a blank state will continue from where the user left
off.

Using the URL hash will always override the last stored view.
hiddewie and others added 11 commits December 11, 2025 21:07
Define colors for common operators, mostly in Europe, Asia and Oceania.

Part of #597
this was more complicated than I expected, but it seems to work nicely.
[OSM
wiki](https://wiki.openstreetmap.org/wiki/Australian_Tagging_Guidelines/Railway_Signals#NSW_Main)
for refererence. the semaphore icons are copy-pasted from 🇧🇪.

<img width="65" height="96" alt="image"
src="https://github.com/user-attachments/assets/230166e3-3e6f-48e2-9e8d-1ae83aab8e6e"
/>
<img width="72" height="72" alt="image"
src="https://github.com/user-attachments/assets/4977eecd-5ffc-4c99-9d4e-f94943816984"
/>
<img width="76" height="148" alt="image"
src="https://github.com/user-attachments/assets/25980492-1bd8-42d2-9412-22e178229f4e"
/>
<img width="102" height="181" alt="image"
src="https://github.com/user-attachments/assets/6f7afa15-34d4-4bb1-9459-4e5bf6f29d18"
/>
<img width="69" height="67" alt="image"
src="https://github.com/user-attachments/assets/0392d1c5-d1a3-42ec-b1cb-6bb2ae1db522"
/>
<img width="71" height="85" alt="image"
src="https://github.com/user-attachments/assets/a55f0733-a309-4a96-8d47-8d95f457606d"
/>
<img width="97" height="82" alt="image"
src="https://github.com/user-attachments/assets/1cbdc10f-63fd-45f2-b137-81e74c88c9bb"
/>
<img width="61" height="70" alt="image"
src="https://github.com/user-attachments/assets/92ab972f-2021-437f-b2df-0b6b8e18eaae"
/>
Includes comments from
#717 (comment)

Part of #597 

### Testing

East United States:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/26c604f7-4a7f-4de9-bf53-17c1bc1bbdf3"
/>

North East US/Canada: 
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/04117e14-8167-4b54-a20a-9e632aa09c61"
/>

Mexico City:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/34b501aa-ebf9-4159-a9b8-4cefb343a37f"
/>

Brasil:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/19310025-f10c-4716-bff6-ddcae2ec2a8b"
/>

South Africa:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/1d70cd4b-177c-4370-90c3-895a3e7d7947"
/>

Tunesia:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/258be360-a596-485d-bd87-3c6802d9d72a"
/>

Europe:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/a58fb824-c0af-463c-ac7d-06afba1af13c"
/>

Switzerland / France / Italy:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/5c80c4ff-c35a-432a-b1cf-52b34dc0577a"
/>

Hungary / Serbia:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/3b115075-6364-4f9e-be20-19a0a97cf8c8"
/>

Georgia:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/89034f80-a5bf-4046-b03a-905583de1db1"
/>

India:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/180a7b30-3bf8-401b-bbc5-657bdd51b846"
/>

Korea:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/a03b54ec-0ddc-491f-b30d-6081539fe11a"
/>

Japan:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/8b5fd9e3-24ac-432a-9a21-65a5a4402791"
/>

Tokyo:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/c44ef823-85d4-43ee-acde-3ed1f1eb89b2"
/>

Osaka:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/4c1bd29f-fbe5-4d2b-9a10-11997612a4c0"
/>

Kunming:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/4ca768fb-e8d5-42dd-b515-85089fd2faa3"
/>

New York City:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/1c1ead94-9846-4c55-92d8-112644694998"
/>

London:
<img width="1429" height="1071" alt="image"
src="https://github.com/user-attachments/assets/a824eee9-4fb3-4b0d-a5da-203bf6ede08d"
/>

Paris:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/e9252533-9424-4732-a47d-3c8266c2f9ef"
/>

Munchen:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/9eb35939-3a78-4ce9-98e1-bed2747730e8"
/>

Leipzig:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/15d70283-32cc-4aba-ad21-50e34e3153c6"
/>

Beograd:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/241933e4-5ab8-46fc-a337-03018b12150f"
/>

Sydney:
<img width="1432" height="1116" alt="image"
src="https://github.com/user-attachments/assets/09b33dfd-5748-47f4-bb96-c53a555690f8"
/>
Fixes #713

There is a bit of duplication, but this is needed because of the
`default` icons.

On station of Reading
(http://localhost:8000/#view=19.6/51.4598362/-0.9749119&style=signals):
<img width="394" height="429" alt="image"
src="https://github.com/user-attachments/assets/4add97a7-075d-4519-a208-c8e6653203b6"
/>
Usable since Maplibre GL JS 5.15, see
#722 and
maplibre/maplibre-gl-js#6659.

The same structure will be used for #600 to toggle layer visibility.
From https://wiki.openstreetmap.org/wiki/OpenRailwayMap/Tagging

See https://en.wikipedia.org/wiki/ATACS,
https://en.wikipedia.org/wiki/Automatic_train_stop,
https://en.wikipedia.org/wiki/Korean_Train_Control_System.

South Korea
(http://localhost:8000/#view=7.85/36.168/128.101&style=signals):

Some lines are combined ATS and ETCS actually, this will be shown once
#549 is implemented.

Before:
<img width="1431" height="1115" alt="image"
src="https://github.com/user-attachments/assets/8c1235c6-ecc7-41c6-b493-d6c6cd42f44e"
/>


After:
<img width="1431" height="1115" alt="image"
src="https://github.com/user-attachments/assets/34ac45b1-fee7-4b71-9ba3-5fde498b57b5"
/>
Part of #495 

Related to #246 and #336.

There are requests to be able to render abandoned and razed railways,
together with the existing infrastructure. This pull request makes that
possible, either by including the OpenHistoricalMap data in the main
infrastructure layer, or by showing the abandoned and razed railways.
For future railways, the same can be chosen: railways under construction
or also those proposed.

Changes:
- Configuration screen for historical and future railways
- Map style adapts to using OpenHistoricalMap or OpenStreetMap as
historical data source
- Map style hides abandoned lines / stations if disabled in the
configuration
- Map style hides construction or proposed lines / stations if disabled
in the configuration
- UI to allow viewing OpenHistoricalMap data together with OpenStreetMap
data for all times.
- Include note that it is discouraged to map dismantled railway features
in OpenStreetMap, with link to documentation.

Depends on maplibre/maplibre-gl-js#6495 to
ensure source data is not loaded if the layer is disabled through
global-state.
--> This has been integrated

## Testing

### Configuration
<img width="846" height="291" alt="image"
src="https://github.com/user-attachments/assets/ab6a5a84-0ce1-430f-a1ad-1ac8a9e6f158"
/>

### Future infrastructure
(http://localhost:8000/#view=14.87/50.94355/10.99233)

Enabled:
<img width="1125" height="873" alt="image"
src="https://github.com/user-attachments/assets/491b59c9-cfb9-4e57-809a-c2b8dcb26d13"
/>

Disabled:
<img width="1125" height="873" alt="image"
src="https://github.com/user-attachments/assets/ce061c9d-06da-4ae5-aa14-66d4d62f0bb4"
/>

### Historical infrastructure

(http://localhost:8000/#view=12/50.62073/12.34528)

OpenStreetMap:
<img width="1686" height="939" alt="image"
src="https://github.com/user-attachments/assets/162910da-41b8-4b3b-9246-9a942e064fb5"
/>

OpenHistoricalMap:
<img width="1686" height="939" alt="image"
src="https://github.com/user-attachments/assets/78612948-296d-4510-b9af-0815df540727"
/>

(http://localhost:8000/#view=11.61/51.1841/12.3729)

OpenStreetMap:
<img width="1686" height="939" alt="image"
src="https://github.com/user-attachments/assets/55a30b53-cf84-4176-ad04-128d670b8cce"
/>

OpenHistoricalMap:
<img width="1686" height="939" alt="image"
src="https://github.com/user-attachments/assets/2c4b6f2f-cde9-4fef-915d-179e83a1e4d0"
/>

(http://localhost:8000/#view=17.53/51.178254/12.389887)

OpenStreetMap:
<img width="1686" height="939" alt="image"
src="https://github.com/user-attachments/assets/7662e555-6afb-4e20-b6ab-cf0cd576309b"
/>

OpenHistoricalMap:
<img width="1686" height="939" alt="image"
src="https://github.com/user-attachments/assets/e8cd8cad-2440-4091-a557-5e599c21638b"
/>

(http://localhost:8000/#view=12.93/54.96675/-1.58696&date=all)

OpenStreetMap:
<img width="1686" height="939" alt="image"
src="https://github.com/user-attachments/assets/830a8a44-df47-4ecc-af36-093564a4c491"
/>

OpenHistoricalMap:
<img width="1686" height="939" alt="image"
src="https://github.com/user-attachments/assets/cc40a3a1-9b56-4751-8ab2-1f61aa807f7b"
/>

(year 1896)
<img width="1686" height="939" alt="image"
src="https://github.com/user-attachments/assets/8c16393f-8dac-4f99-b333-fa05cfb36566"
/>
Part of #272

Only import and display in popup. The visualization as a map layer with
colors on the railway lines will come later.

<img width="1430" height="867" alt="image"
src="https://github.com/user-attachments/assets/77bb99dd-bce8-4513-8bc0-8b41a52ae1a7"
/>
From #723

Followup from
#396.

There are more services than needed in the Docker Compose file. The
SETUP.md instructions will only start the actual needed services to run
the project, not the tests or extra data services.
hiddewie and others added 18 commits December 28, 2025 10:09
Goal: allow generating the dynamic legend, to take account the user
configuration for showing which entries to show.

Needed for #731, which will contain legend entries for either the
voltage / frequency, or maximum current.

Changes:
- Generate the legend in the UI, instead of during style generation.
- Simplify legend generation:
  - Only generate for current map zoom
  - Only generate legend when the legend is shown
- Encapsulate legend fully in the legend control, less global state in
UI
- Fixes legend for OpenHistoricalMap-powered historical railways
- Makes legend show relevant entries like abandoned/razed railways when
OpenStreetMap is used to show historical data, or when constructed or
proposed rail/stations are enabled

Additionally, this change improves the performance of the UI somewhat,
because the legend and corresponding map, style and icons are not loaded
when not needed.

Legend for low zooms, present, historical, all time:
<img width="318" height="454" alt="image"
src="https://github.com/user-attachments/assets/ab8d4206-2306-44b2-abde-ccc524fc8306"
/><img width="318" height="454" alt="image"
src="https://github.com/user-attachments/assets/2e5eb626-5fbb-4b39-af04-9798d447fc9d"
/><img width="318" height="454" alt="image"
src="https://github.com/user-attachments/assets/4a1a849d-22d8-4761-abe4-095fb9b9b68f"
/>

Legend without and with construction and proposed railways enabled:
<img width="318" height="454" alt="image"
src="https://github.com/user-attachments/assets/b57a0643-68b5-4991-9e29-a372b583be38"
/><img width="318" height="454" alt="image"
src="https://github.com/user-attachments/assets/b86ca6cb-74d8-45e8-a9b1-f25c0b636526"
/>

Legend without and with OpenStreetMap historical railway lines enabled:
<img width="318" height="454" alt="image"
src="https://github.com/user-attachments/assets/56a79594-2a08-48fc-adf7-25796d8e0f1d"
/><img width="318" height="454" alt="image"
src="https://github.com/user-attachments/assets/bf981668-7765-4e24-84b8-34903ea73da3"
/>
…n layer (#731)

Part of #272

Followup of #730

Pre-work for discussion
#527.

Changes:
- Addition of tabs in the configuration modal to support configuration
per map layer
- Addition of configuration of the electrification layer to support both
voltage/frequency and maximum current

~TODO: move some configuration to its own section in the configuration
modal~ --> #738

~TODO: make legend work~ --> #742

## Testing

### Configuration

<img width="292" height="285" alt="image"
src="https://github.com/user-attachments/assets/53f7c760-0086-49c8-85f2-becb35396f75"
/>

<img width="1430" height="586" alt="image"
src="https://github.com/user-attachments/assets/308d1812-808c-44dc-babb-2fbb18ff3286"
/>

### Belgium

(http://localhost:8000/#view=7.95/50.771/4.453&style=electrification)

<img width="1432" height="1107" alt="image"
src="https://github.com/user-attachments/assets/0d48819e-c7c4-4121-866f-418810fb5526"
/>

### Germany

(http://localhost:8000/#view=9/49.1888/8.9868&style=electrification)

<img width="1430" height="1107" alt="image"
src="https://github.com/user-attachments/assets/a381190b-a076-4bc4-8fc2-44e290d9affd"
/>

### Italy

(http://localhost:8000/#view=7.64/45.826/11.885&style=electrification)

<img width="1430" height="1107" alt="image"
src="https://github.com/user-attachments/assets/af025b96-7258-436a-94b7-40be2509f795"
/>


### Legend

<img width="1429" height="743" alt="image"
src="https://github.com/user-attachments/assets/3f19b82b-a08a-40c5-b1c7-71b65da52419"
/>
<img width="1429" height="743" alt="image"
src="https://github.com/user-attachments/assets/1f6efcb5-5395-4e02-9a98-9e60ea04708d"
/>
Built on #731.

Move configuration of the infrastructure layer to the separate
configuration section.

<img width="1432" height="588" alt="image"
src="https://github.com/user-attachments/assets/ed149c1c-1713-4479-baef-5f15de6568d5"
/>
Includes https://github.com/hiddewie/OpenRailwayMap-vector/pulls/731

Part of #272

Render the maximum delivered power of a railway line, if both voltage
and maximum current are known.

~Dummy PR until the maximum current is done.~


## Testing

### Configuration

<img width="1431" height="338" alt="image"
src="https://github.com/user-attachments/assets/3d318e5d-4b52-4b95-ba5f-115613d93f77"
/>

### Belgium

(http://localhost:8000/#view=7.71/50.725/4.074&style=electrification)

<img width="1431" height="827" alt="image"
src="https://github.com/user-attachments/assets/3ab41710-a1dd-4f58-9398-f9b704831c4a"
/>

### Germany

(http://localhost:8000/#view=8.51/49.1678/8.8557&style=electrification)

<img width="1431" height="827" alt="image"
src="https://github.com/user-attachments/assets/dc1bf496-707a-41cd-9177-7dd577b85e1f"
/>

### Italy

(http://localhost:8000/#view=7.72/46.154/12.237&style=electrification)

<img width="1431" height="827" alt="image"
src="https://github.com/user-attachments/assets/7c4cb2fb-47d0-44ec-aa2d-c60a5cf96141"
/>
Same as #706, now
for the operator layer.

(http://localhost:8000/#view=16.06/45.447618/10.949145&style=operator)

Before:
<img width="705" height="702" alt="image"
src="https://github.com/user-attachments/assets/de2cdfa0-9798-4ed6-a1fd-cfdd7595f7f8"
/>

After:
<img width="705" height="702" alt="image"
src="https://github.com/user-attachments/assets/d27b9e5b-cc94-420d-8ae1-a6cf391cf57a"
/>
Similar to bridges: only render them based on the zoom level and a
minimum length.

(http://localhost:8000/#view=9.27/44.4522/9.039&style=electrification)

Before:
<img width="944" height="540" alt="image"
src="https://github.com/user-attachments/assets/fd2465ce-5183-4ebc-aa96-00225d4d007b"
/>


After:
<img width="944" height="540" alt="image"
src="https://github.com/user-attachments/assets/c0ff4daf-2e0b-431d-8e7f-c3a23e963f27"
/>
)

Goal: reduce the amount of styles visible by default, to allow for new
styles like routes (#413) and diagnostics (#648).

The gauge, loading gauge and track class styles all have to do with the
track, space around the track and their size/weight bearing properties.

The three styles are merged into a single **Track** style, with
configuration to render the railway lines using the gauge, loading gauge
or track class colors.

The legend updates automatically.

Existing links to the the `gauge`, `loading_gauge` and `track_class`
styles as hash parameters are automatically updated to change the
configuration and show the new track style.

Configuration:
<img width="1431" height="826" alt="image"
src="https://github.com/user-attachments/assets/dd21d2f4-d8ad-4d7e-9f9c-6c4e2cb7ae79"
/>


Gauge:
<img width="1431" height="826" alt="image"
src="https://github.com/user-attachments/assets/21805e1d-c06e-4e28-9d76-cb05beb7357c"
/>


Loading gauge:
<img width="1431" height="826" alt="image"
src="https://github.com/user-attachments/assets/9febefcf-5d95-444d-9552-8946f1e50aed"
/>

Track class:
<img width="1431" height="826" alt="image"
src="https://github.com/user-attachments/assets/90f23817-23d2-4cf2-a34c-035b4fd48ccb"
/>
Fixes #732

Render historical railway landuse.

Example Tegola UI link:
https://vtiles.openhistoricalmap.org/#16/52.330959/4.966813

Layer: `landuse_areas`
Class: `landuse`
Type: `railway`

(http://localhost:8000/#view=14.65/52.33033/4.96296&date=all):

<img width="1399" height="793" alt="image"
src="https://github.com/user-attachments/assets/b0bfd800-09ad-4ae8-9811-ee4d25b2497e"
/>

(http://localhost:8000/#view=14.65/52.33033/4.96296&date=1978):

<img width="1434" height="679" alt="image"
src="https://github.com/user-attachments/assets/1468ebc8-ec39-42f5-bf51-fe0775a37646"
/>
Added [badges](https://github.com/badges/shields).
Maintainers feel free to modify or discard changes.

[See changes
visually](https://github.com/danieldegroot2/OpenRailwayMap-vector/tree/readme-badges?tab=readme-ov-file#openrailwaymap-vector-map-styles)
(Scroll up slightly. You might have to (Ctrl+)(Shift+)F5 clear cache to
see valid BMC supporters count.)

---

I am aware this repository is [possibly being
integrated](OpenRailwayMap#132)
into the OpenRailwayMap-CartoCSS repository.
Check with the maintainers which content should be kept from each
repository / how ie. funding might be handled.

---------

Co-authored-by: Hidde Wieringa <[email protected]>
Noticed during
#734 (comment)

For tall icons for the bottom icon of a signal feature, the reference is
always offset using the same fixed offset. This will overlap the
reference text with the icon.

Instead, output the icon offset such that the text label for the
reference can be offset by the same value (plus some padding).


(http://localhost:8000/#view=18.41/49.010647/8.384991/-19.5&style=signals):
<img width="1074" height="574" alt="image"
src="https://github.com/user-attachments/assets/c2288181-d5f6-4327-ab5d-0ac441065624"
/>


(http://localhost:8000/#view=18.08/49.00242/8.394911/-19.5&style=signals)
<img width="1074" height="574" alt="image"
src="https://github.com/user-attachments/assets/8ab6c7b6-c929-4611-9b9d-beadda7b015b"
/>


(http://localhost:8000/#view=19/48.9970422/8.4158721/-19.5&style=signals)
<img width="1074" height="574" alt="image"
src="https://github.com/user-attachments/assets/283ae76b-cfd9-44cc-8129-b91b11545251"
/>
AKN
<img width="361" height="822" alt="image"
src="https://github.com/user-attachments/assets/e7a6a3ff-d728-4a5d-b6d0-3228565b315f"
/>

Deutsche Regionaleisenbahn
<img width="1045" height="382" alt="image"
src="https://github.com/user-attachments/assets/27d2b859-a6e9-4c4a-8352-299a5a652a73"
/>

Thüringer Eisenbahn GmbH and Deutsche Regionaleisenbahn
<img width="567" height="395" alt="image"
src="https://github.com/user-attachments/assets/40323e54-e392-41ab-a14b-5691b1506567"
/>

Schieneninfrastruktur Ost-Niedersachsen GmbH
<img width="703" height="811" alt="image"
src="https://github.com/user-attachments/assets/218f9496-b8a5-4688-a214-f0e4a197354b"
/>
Adds GB stop & fixed distant boards.

Distant signals kept together.
Stop board placed to allow for a position light (shunt) signal, but
below an LC indicator. Only thing of note is that the order would be
slightly at issue with ETCS block markers, however I will create an
issue and then PR shortly after this is merged, as there are also other
order issues to work on.
For stacked signal icons, with multiple icons that have an icon with a
position defined, only the first position was removed on the catalog
lookup.

Found during testing of
#734 (comment)


(http://localhost:8000/#view=17.65/49.00464/8.411248/-19.5&style=signals):
<img width="847" height="596" alt="image"
src="https://github.com/user-attachments/assets/8a0731fe-6a35-402f-8e44-83b417428464"
/>
… lines (#748)

Part of #413 

Integrate railway routes for stations, platforms, stop positions and
railway lines in the popup UI and on the map when clicked.

Changes:
- [x] Import route details
- [x] Add routes in popup for lines
- [x] Add routes in popup for platforms
- [x] Add routes in popup for stop positions
- [x] Add routes in popup for stations
- [x] Add display of route on map when clicking route
- [x] Add display of route information when clicking route 

See:
- https://wiki.openstreetmap.org/wiki/Relation:route
- https://wiki.openstreetmap.org/wiki/Tag:route=train?uselang=en
Fixes #749

The wrong tag for opposite regime signals was used.

Related to #541, which fixed this for main signals.

Also, add the yellow distant signal marker board

Before:
<img width="524" height="556" alt="image"
src="https://github.com/user-attachments/assets/f794962a-e0aa-47d6-8540-d58059a7ff79"
/>

After:
<img width="433" height="501" alt="image"
src="https://github.com/user-attachments/assets/d6d898c1-69ce-4ba5-8dd7-66fdcd811e9b"
/>
Reverts the changes of the distant plates introduced in
#756.

Discussed in #749
…date (#760)

From #748

The nightly update fails because of timeouts on a delete query to reduce
data, and because of disk space issues.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.